﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Aeroporto.controle;
using System.Collections;
using Aeroporto.modelo;
using Aeroporto.visao;

namespace Aeroporto.visão
{
    public partial class formCadastroDisponibiliza : Form
    {
        private DisponibilizaControl control_disponibiliza = new DisponibilizaControl();

        public formCadastroDisponibiliza()
        {
            InitializeComponent();
        }

        private void formCadastroDisponibiliza_Load(object sender, EventArgs e)
        {
            lista_dados();
        }

        /**
         * Lista dados no grid
         **/
        private void lista_dados()
        {
            try
            {
                grid_disponibiliza.DataSource = control_disponibiliza.lista_dados("disponibiliza");
                grid_disponibiliza.Sort(grid_disponibiliza.Columns["data_viagem"], ListSortDirection.Ascending);  //ordena dados do grid ascendentemente por cod_reserva
                grid_disponibiliza.Columns["cod_reserva"].HeaderText = "Código";     //altera cabeçalho do grid
                grid_disponibiliza.Columns["id_trecho"].HeaderText = "Trecho";              //altera cabeçalho do grid
                grid_disponibiliza.Columns["data_viagem"].HeaderText = "Data da Viagem";       //altera cabeçalho do grid
                grid_disponibiliza.Columns["cod_aeronave"].HeaderText = "Aeronave";       //altera cabeçalho do grid
                grid_disponibiliza.Columns["numero"].HeaderText = "Número da Poltrona";       //altera cabeçalho do grid
                grid_disponibiliza.Columns["fila"].HeaderText = "Fila";       //altera cabeçalho do grid
                atualiza_campos();
                grid_disponibiliza.ReadOnly = true;
            }
            catch (Exception erro)
            {
                MessageBox.Show("Erro na listagem do Grid: " + erro);
            }
        }

        private void atualiza_campos()
        {
            int linha = grid_disponibiliza.CurrentRow.Index;

            txt_fila.Text = grid_disponibiliza[0, linha].Value.ToString();      //atualiza o TextEdit de codigo com o valor que está na coluna 0 e na linha "linha" do grid
            txt_numero.Text = grid_disponibiliza[1, linha].Value.ToString();
            txt_aeronave.Text = grid_disponibiliza[2, linha].Value.ToString();
            mask_data.Text = grid_disponibiliza[3, linha].Value.ToString();
            txt_trecho.Text = grid_disponibiliza[4, linha].Value.ToString();
            txt_reserva.Text = grid_disponibiliza[5, linha].Value.ToString();                        
        }

        private void grid_disponibiliza_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
            atualiza_campos();
        }

        private void b_pesquisar_Click(object sender, EventArgs e)
        {
            grid_disponibiliza.DataSource = control_disponibiliza.pesquisar_data(mask_pesquisar.Text);
        }

        private void b_remover_Click(object sender, EventArgs e)
        {
            if (txt_aeronave.Text == "" || txt_fila.Text == "" || txt_numero.Text == "" || txt_trecho.Text == "")
            {  //verifica se os campos dos TextEdit's não estão preenchidos
                MessageBox.Show("Selecione um disponibiliza na tabela de reservas para excluir", "Atenção.:"); //se não estão, mensagem de Atenção é exibida
                return;
            }

            ArrayList chaves_primarias = new ArrayList();
            //se os campos estão preenchidos
            foreach (DataGridViewRow r in grid_disponibiliza.SelectedRows)//pega as linhas selecionadas
            {
                ArrayList aux = new ArrayList();
                aux.Add(r.Cells[0].Value.ToString());
                aux.Add(r.Cells[1].Value.ToString());
                aux.Add(r.Cells[2].Value.ToString());
                aux.Add(r.Cells[3].Value.ToString());
                aux.Add(r.Cells[4].Value.ToString());
                chaves_primarias.Add(aux);
            }

            if (MessageBox.Show("Tem certeza que deseja excluir " + chaves_primarias.Count + " disponibilizas", "Disponibiliza", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)//exibe mensagem para confirmar exclusão
            {
                MyMessageBox message_box = control_disponibiliza.exclui_reserva(chaves_primarias);  //exclui a reserva cujo o código está no TextEdit de código
                MessageBox.Show(message_box.String1, message_box.String2);                    //mostra mensagem se excluiu ou não
                lista_dados();                                                                //atualiza os dados do grid
            }
        }

        private void b_inserir_Click(object sender, EventArgs e)
        {
            MyMessageBox message_box = control_disponibiliza.valida_insert_disponibiliza(
                txt_fila.Text, txt_numero.Text, txt_aeronave.Text, mask_data.Text, txt_trecho.Text, txt_reserva.Text);  //valida e insere dados dos TextEdit's

            MessageBox.Show(message_box.String1, message_box.String2);
            switch (message_box.String2)    //de acordo com a string2 do MyMessageBox veremos se deu certo, ou não a inserção
            {                
                case "OK.:":                    //se a string2 for "OK.:"
                    limpar();                   //limpa o formulário
                    lista_dados();              //lista o grid atualizado
                    break;
            }
        }

        private void limpar()
        {
            txt_fila.Text = "";
            txt_numero.Text = "";
            txt_aeronave.Text = "";
            mask_data.Text = "";
            txt_trecho.Text = "";
            txt_reserva.Text = "";
        }

        private void b_editar_Click(object sender, EventArgs e)
        {
            ArrayList chave_primaria_antiga = new ArrayList();
            chave_primaria_antiga.Add(grid_disponibiliza[0, grid_disponibiliza.CurrentCell.RowIndex].Value.ToString());   //pegamos a chave primária antiga que se encontra no grid, pois, precisamos verificar se a chave primária foi alterada
            chave_primaria_antiga.Add(grid_disponibiliza[1, grid_disponibiliza.CurrentCell.RowIndex].Value.ToString());
            chave_primaria_antiga.Add(grid_disponibiliza[2, grid_disponibiliza.CurrentCell.RowIndex].Value.ToString());
            chave_primaria_antiga.Add(grid_disponibiliza[3, grid_disponibiliza.CurrentCell.RowIndex].Value.ToString());
            chave_primaria_antiga.Add(grid_disponibiliza[4, grid_disponibiliza.CurrentCell.RowIndex].Value.ToString());
            MyMessageBox message_box = control_disponibiliza.valida_update_disponibiliza(
                txt_fila.Text, txt_numero.Text, txt_aeronave.Text, mask_data.Text, txt_trecho.Text, txt_reserva.Text, chave_primaria_antiga);//valida e atualiza os dados 
            MessageBox.Show(message_box.String1, message_box.String2);//exibe mensagem dizendo se foi ou não atualizado os dados
            if (message_box.String2 == "OK.:")
                lista_dados();//atualiza os dados do grid
            else
                atualiza_campos();
        }

        private void b_limpar_Click(object sender, EventArgs e)
        {
            limpar();
        }

        private void b_atualizar_Click(object sender, EventArgs e)
        {
            atualiza_campos();
        }

     


        
    }
}
